配置及环境
Lapis
被设计于依据不同环境载入不同的配置来运行服务器。例如,可能您开发环境的配置设置为本地数据库的URL
,禁用代码缓存和单个worker
。然后,您生产环境的配置可能设定为远程数据库的 URL
,启用代码缓存和8个worker
。
当启动服务器时,lapis
命令行工具接受第二个参数:
$ lapis server [environment]
默认情况下,环境是development
。环境名称仅影响加载的配置。如果你没有任何配置,这绝对没有效果,所以让我们创建一些。
创建配置
每当 Lapis
执行依赖于配置的代码时,它会尝试加载 config
模块。 config
模块是我们定义环境特定的变量的地方。它是一个标准的 Lua/MoonScript
文件,所以让我们创建它。
如果未找到 config
模块,则不会抛出错误,此时则会使用默认的配置。
local config = require("lapis.config")
config("development", {
port = 8080
})
config("production", {
port = 80,
num_workers = 4,
code_cache = "on"
})
我们使用 lapis.config
中提供的配置助手来创建我们的配置。在上面的例子中,我们定义了两个配置,并为每个配置设置端口。
配置只是一个简单的表。使用上面的特殊构建器语法构建配置表。
我们可以通过传递环境名称的数组表 来一次 配置多个环境:
config({"development", "production"}, {
session_name = "my_app_session"
})
配置文件对于访问组合嵌套的表有着不错的语法。 MoonScript
和 Lua
都有自己的变体,有关语法的更多细节,请查看相应的指南。[lua配置语法]()
配置和Nginx
编译 nginx.conf
时使用配置中的值。插入的Nginx配置变量不区分大小写。它们通常以所有大写形式编写,因为在检查配置之前会先检查 shell
的环境是否有值。
例如,这里有一个 Lapis Nginx
的配置块:
events {
worker_connections ${{WORKER_CONNECTIONS}};
}
编译时,首先检查环境变量 LAPIS_WORKER_CONNECTIONS
。如果它没有值,那么将检查当前环境的配置的 worker_connections
。
在应用程序中访问配置
该配置也可在应用程序中使用。我们可以像下面这样来访问配置表:
local config = require("lapis.config").get()
print(config.port)
当前环境的名称存储在 _name
中。
print(config._name) -- development, production, etc...
默认配置
所有配置都有一些默认值,下面这些是他们在表中的语法:
default_config = {
port = "8080",
secret = "please-change-me",
session_name = "lapis_session",
num_workers = "1",
logging = {
queries = true,
requests = true
}
}
可用配置
虽然大多数配置键是随意使用的,但是有一些名称是被保留用于配置 Lapis
和支持库。这里是他们的列表:
port
(number
) - Nginx
的端口,在nginx.conf
中默认定义
num_workers
(number
) - Nginx
启动的work
数,在 nginx.conf
中默认定义
session_name
(string
) - 将存储会话的 cookie
的名称
secret
(string
) - encode_with_secret
使用的秘密密钥,也用于签署会话cookie
measure_performance
(bool
) - 用于启用性能时间和查询跟踪
logging
(table
) - 配置要记录到控制台或日志文件的事件
配置日志
logging
配置键可用于禁用 Lapis
默认情况下执行的各种日志记录。logging
配置的默认值为:
{
queries = true,
requests = true
}
所有日志都使用 OpenResty
提供的 print
函数 对 Nginx
的 notice
日志进行记录。默认 notice
日志记录位置设置为 stderr
,在默认的 Lapis Nginx
配置中指定。它可以使用 error_log
指令进行配置。
性能测量
如果 measure_performance
配置值设置为 true
, Lapis
可以收集各种操作的计时和计数。
这些数据存储在 ngx.ctx.performance
中。在以下字段将被收集到表中:
view_time
- 呈现视图所用的时间(以秒为单位)
layout_time
- 呈现布局所用的时间(以秒为单位)
db_time
- 执行查询所花费的时间(以秒为单位)
db_count
- 执行的查询数
http_time
- 执行 HTTP
请求所花费的时间(以秒为单位)
http_count
- 发送的 HTTP
请求数
如果在请求中未执行相应的操作,则字段将为 nil
。这些字段在请求过程中填写,因此最好只在请求结束时访问它们,以确保所有数据可用。 after_dispatch
助手可以用来注册一个函数,以便在请求处理的最后阶段运行。
在此示例中,性能数据在每个请求结束时打印到日志中:
local lapis = require("lapis")
local after_dispatch = require("lapis.nginx.context").after_dispatch
local to_json = require("lapis.util").to_json
local config = require("lapis.config")
config("development", {
measure_performance = true
})
local app = lapis.Application()
app:before_filter(function(self)
after_dispatch(function()
print(to_json(ngx.ctx.performance))
end)
end)
-- ...
return app
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。